package handler

import (
	"2212b/2212ay1/api/request"
	"2212b/2212ay1/global"
	"2212b/2212ay1/internal/dao"
	"2212b/2212ay1/internal/model"
	"github.com/gin-gonic/gin"
	"github.com/google/uuid"
	"net/http"
)

func RechargeOrder(c *gin.Context) {
	var req request.RechargeOrderReq

	if err := c.ShouldBind(&req); err != nil {
		c.JSON(http.StatusOK, gin.H{
			"code": 100000,
			"msg":  "参数验证失败",
			"data": err.Error(),
		})
		return
	}
	userId := c.GetUint("userId")
	var user model.User
	dao.GetOneById(userId, &user)
	dao.Update(&model.User{
		Id:    userId,
		Money: user.Money + req.Money,
	})

	dao.Create(&model.Order{
		OrderNo: uuid.NewString(),
		UserId:  userId,
		Money:   req.Money,
		Status:  1,
		Product: "充值",
	})
	c.JSON(http.StatusOK, gin.H{
		"code": http.StatusOK,
		"msg":  "充值成功",
		"data": true,
	})
}

//	func BuyOrder(c *gin.Context) {
//		var req request.BuyVIPReq
//
//		// 参数验证
//		if err := c.ShouldBind(&req); err != nil {
//			c.JSON(http.StatusOK, gin.H{
//				"code": 100000,
//				"msg":  "参数验证失败",
//				"data": err.Error(),
//			})
//			return
//		}
//
//		userId := c.GetUint("userId")
//
//		// 查询用户信息
//		var user model.User
//		dao.GetOneByFields(&model.User{
//			Id: userId,
//		}, &user)
//		if user.Id == 0 {
//			c.JSON(http.StatusOK, gin.H{
//				"code": 100000,
//				"msg":  "用户不存在",
//				"data": nil,
//			})
//			return
//		}
//
//		// VIP 产品配置
//		vipProducts := map[string]struct {
//			Name     string
//			Duration time.Duration
//			Price    uint
//		}{
//			"vip1": {
//				Name:     "月度VIP",
//				Duration: 30 * 24 * time.Hour,
//				Price:    30,
//			},
//			"vip2": {
//				Name:     "季度VIP",
//				Duration: 90 * 24 * time.Hour,
//				Price:    80,
//			},
//			"vip3": {
//				Name:     "年度VIP",
//				Duration: 365 * 24 * time.Hour,
//				Price:    280,
//			},
//		}
//
//		// 检查产品是否存在
//		product, exists := vipProducts[req.Product]
//		if !exists {
//			c.JSON(http.StatusOK, gin.H{
//				"code": 100002,
//				"msg":  "无效的 VIP 产品",
//				"data": nil,
//			})
//			return
//		}
//
//		// 检查余额是否足够
//		if user.Money < product.Price {
//			c.JSON(http.StatusOK, gin.H{
//				"code": 100003,
//				"msg":  "余额不足",
//				"data": nil,
//			})
//			return
//		}
//		create := dao.Create(&model.Order{
//			OrderNo: uuid.NewString(),
//			UserId:  userId,
//			Money:   product.Price,
//			Status:  2, // 2 表示购买
//			Product: req.Product,
//		})
//		dao.GetOneById(userId, &user)
//		dao.Update(&model.User{
//			Id:    userId,
//			Level: ,
//		})
//		if !create {
//			c.JSON(http.StatusOK, gin.H{
//				"code": 100004,
//				"msg":  "购买失败",
//				"data": nil,
//			})
//			return
//		}
//
//		c.JSON(http.StatusOK, gin.H{
//			"code": http.StatusOK,
//			"msg":  "VIP 购买成功",
//			"data": map[string]interface{}{
//				"product":         product.Name,
//				"expire_time":     time.Now().Format("2006-01-02 15:04:05"),
//				"remaining_money": user.Money - product.Price,
//			},
//		})
//	}
func BuyOrder(c *gin.Context) {
	var req request.BuyVIPReq

	// 参数验证
	if err := c.ShouldBind(&req); err != nil {
		c.JSON(http.StatusOK, gin.H{
			"code": 100000,
			"msg":  "参数验证失败",
			"data": err.Error(),
		})
		return
	}
	if global.VIP_MAPPING[req.Level] == 0 {
		c.JSON(http.StatusOK, gin.H{
			"code": 100000,
			"msg":  "非法参数",
			"data": nil,
		})
		return
	}
	//1拿出当前用户的价格
	userId := c.GetUint("userId")
	var user model.User
	dao.GetOneById(userId, &user)
	//2购买，比价格
	if user.Money < global.VIP_MAPPING[req.Level] {
		c.JSON(http.StatusOK, gin.H{
			"code": 100000,
			"msg":  "余额不足，请充值",
			"data": nil,
		})
		return
	}
	//修改用户的余额，同时修改用户vip
	dao.Update(&model.User{
		Id:    userId,
		Money: user.Money - global.VIP_MAPPING[req.Level],
		Level: req.Level,
	})
	//4订单
	dao.Create(&model.Order{
		OrderNo: uuid.NewString(),
		UserId:  userId,
		Money:   global.VIP_MAPPING[req.Level],
		Status:  2,
		Product: "",
	})
	c.JSON(http.StatusOK, gin.H{
		"code": http.StatusOK,
		"msg":  "购买成功",
		"data": true,
	})
}
func GetOrderList(c *gin.Context) {

}
